"use strict"

const Service = require('egg').Service
const moment = require('moment')

class AdverService extends Service {
    /**
     * 
     * @param {列表} param 
     * start
     */
    async list(param) {
        const { app, ctx } = this
        const start = param.start
        const where = start? {start} : {}
        try{
            const result = await app.model.Adver.findAll({
                where,
                distinct: true
            })

            return ctx.app.returnHint(result, '查询成功').definedSucceed
        }catch(err) {
            console.log(err)
            return ctx.app.returnHint(err, '查询失败').definedError
        }
    }

    /**
     *  @param { 详情 } param
     * id
     */
    async details(param) {
        const { app, ctx } = this
        const id = param.id
        try{
            const result = await app.model.Adver.findOne({
                where: { id }
            })
            return ctx.app.returnHint(result, '删除成功').definedSucceed
        }catch(err){
            console.log(err)
            return ctx.app.returnHint(err, '查询失败').definedError
        }
    }

    /**
     * 
     * @param { 新增 } param
     * 
     */
    async add(param) {
        const { app, ctx } = this
        // 开始事务
        const transaction = await app.model.transaction();
        try{
            const data = {
                name: param.name,
                img: param.img,
                url: param.url,
                start: param.start,
                remark: param.remark,
                create_time: moment().format('YYYY-MM-DD HH:mm:ss')
            }
            
            const result = await app.model.Adver.create(data, {
                transaction
            })
            // 事务提交
            await transaction.commit();
            return ctx.app.returnHint(result, '添加成功').definedSucceed
        }catch(err){
            console.log(err)
            await transaction.rollback();// 捕获异常后回滚事务！！
            return ctx.app.returnHint(err, '添加失败').definedError
        }
    }

    /**
     * 
     * @param {编辑} param 
     * id
     * 
     */
    async redact(param) {
        const { app, ctx } = this
        // 开始事务
        const transaction = await app.model.transaction();
        const id = param.id
        try{
            const data = {
                name: param.name,
                img: param.img,
                url: param.url,
                start: param.start,
                remark: param.remark,
                update_time: moment().format('YYYY-MM-DD HH:mm:ss')
            }
    
            // 更新数据
            const result = await app.model.Adver.update(data, {
                where: { id },
                transaction
            })
            // 事务提交
            await transaction.commit();
            return ctx.app.returnHint(result, '更新成功').definedSucceed
        }catch(err){
            console.log(err)
            await transaction.rollback();// 捕获异常后回滚事务！！
            return ctx.app.returnHint(err, '更新失败').definedError
        }
    }

    /**
     * @param { 删除 } param
     * id
     */
    async del(param) {
        const { app, ctx } = this
        const transaction = await app.model.transaction(); // 开始事务
        const id = param.id
        try{
            const result = await app.model.Adver.destroy({
                where: { id },
                transaction
            })
            // 事务提交
            await transaction.commit();
            return ctx.app.returnHint(result, '删除成功').definedSucceed
        }catch(err) {
            console.log(err)
            await transaction.rollback();// 捕获异常后回滚事务！！
            return ctx.app.returnHint(err, '删除失败').definedError
        }   

    }

}

module.exports = AdverService